package data.hullmods;

import com.fs.starfarer.api.combat.BaseHullMod;
import com.fs.starfarer.api.combat.MutableShipStatsAPI;
import com.fs.starfarer.api.combat.ShipAPI;
import com.fs.starfarer.api.combat.ShipAPI.HullSize;
import com.fs.starfarer.api.Global;
import com.fs.starfarer.api.combat.*;
import com.fs.starfarer.api.ui.Alignment;
import com.fs.starfarer.api.ui.TooltipMakerAPI;
import com.fs.starfarer.api.util.Misc;
import com.fs.starfarer.api.impl.campaign.ids.Stats;

public class Diamond_fixer extends BaseHullMod{
	private static float HEAL_HULL_AMOUNT = 7.5f; //+7.5% per second
	private static float REPAIR_BONUS = 10f; //-10%
	public static final float DEGRADE_REDUCTION_PERCENT = 75f;
	public static final float HULL_BONUS = -40f;
	public static float ARMOR_BONUS = -35f;
	private static final float MAX_TIME_MULT = 0.45f;

	@Override
	public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
		stats.getCombatEngineRepairTimeMult().modifyMult(id, 1f - REPAIR_BONUS * 0.01f);
		stats.getCombatWeaponRepairTimeMult().modifyMult(id, 1f - REPAIR_BONUS * 0.01f);
		stats.getCRLossPerSecondPercent().modifyMult(id, 1f - DEGRADE_REDUCTION_PERCENT / 100f);
		stats.getHullBonus().modifyPercent(id, HULL_BONUS);
		stats.getArmorBonus().modifyPercent(id, ARMOR_BONUS);
		stats.getFluxDissipation().modifyMult(id, 1.1f);
		stats.getFluxCapacity().modifyMult(id, 1.15f);
	}
	@Override
    public void advanceInCombat(ShipAPI ship, float amount) {
        if (!ship.isAlive()) return;
		float currentHP = ship.getHitpoints();
		float maxHP = ship.getMaxHitpoints();
		if (currentHP < (maxHP * 0.25f)) {
			float newHP = currentHP + (maxHP * amount * HEAL_HULL_AMOUNT * 0.01f);
			if (newHP < maxHP) ship.setHitpoints(newHP);
			else ship.setHitpoints(maxHP);
		}
	}
	@Override
	public void apply(MutableShipStatsAPI stats, ShipAPI ship, float shipTimeMult) {
		if (!ship.isAlive()) return;
		float currentHP = ship.getHitpoints();
		float maxHP = ship.getMaxHitpoints();
		if (currentHP < maxHP * 0.5f) {
			shipTimeMult = 1f + 0.05f;
			if (currentHP < maxHP * 0.4f) {
				shipTimeMult = 1f + 0.1f;
				if (currentHP < maxHP * 0.25f){
					shipTimeMult = 1f + 0.2f;
					if (currentHP < maxHP * 0.1f)
						shipTimeMult = 1f + MAX_TIME_MULT;
				}
			}
		}else shipTimeMult = 1f;
		ship.getMutableStats().getTimeMult().modifyMult("Diamond_fixer",shipTimeMult);

		//stats.getTimeMult().modifyMult(id, shipTimeMult + 0.01f);
		//stats.getFluxDissipation().modifyMult(id, shipTimeMult);
		//stats.getFluxCapacity().modifyMult(id, shipTimeMult);
		//stats.getMaxSpeed().modifyMult(id, shipTimeMult * 0.95f);
		//stats.getAcceleration().modifyMult(id, shipTimeMult);
		//stats.getDeceleration().modifyMult(id, shipTimeMult);
		//stats.getTurnAcceleration().modifyMult(id, shipTimeMult);
		//stats.getMaxTurnRate().modifyMult(id, shipTimeMult);
	}
	public String getDescriptionParam(int index, HullSize hullSize) {
		if (index == 0) return "" + "25%";
		if (index == 1) return "" + (int) HEAL_HULL_AMOUNT + "%";
		return null;
	}
}